;History ;v1.1 - First public release ;v1.11 - Fixed bug in MUseShapeBank and altered ShapesTotal size to word as it was incorrectly a longword ; - Fixed bug in the errorchecking of Mc2pCPUmode that was checking d3 instead of d0 ;v1.12 - Fixed bug in MUnQueue that would only do two lines of code if wrapping was active, but should have been done always ;v1.13 - MBoxF, MBoxFShape, MBoxFStencil and MBoxFCookie added ; - MBox, MBoxShape, MBoxStencil and MBoxCookie added ;v1.14 - MPlanar16ToBitmap, MPlanar16ToShape added ;v1.15 - Planar-to-chunky converter optimised further using addx and reverse bitplane order, twice as fast as roxr.b #n,dn ; - MGenericPtr added ; - A shape's handle is unconditionally added (actually subtracted) to Xpos,Ypos in shape-to-bitmap type blits (MBlit etc) ;v1.16 - Fixed small bug in !PerformPoint macro, d6.l should have been d6.w. ; - Fixed small but ineffective bug in MPlotCookie, d6.l should have been d6.w ;v1.17 - Added MCludgeCookie and MCludgeStencil, also needed to add two macros ; - Fixed bug in macro used by MCludgeCookie and MCludgeStencil, as it was not setting `SHere' to 0 to indicate cludge. ;v1.18 - Added MUnQueueRange for unqueuing a range of items and without flushing the queue ;v1.19 - Fixed bug in data for shape banks, was using structures of 8 bytes but only were 6 bytes in mem ; - Fixed bug in MReserveShapes, was shifting bank number 8 places instead of 3 ;v1.2 - Added MReMap and MReMapShape ;v1.21 - Fixed bug in macro DeallocStencil, was killing the whole object ;v1.22 - Commented-out line in MShapeClip and MBitmapClip to make X leftedge unaligned (width is still multiple of 4) ; - Commented-out line in Macro CludgeResourceWindow to make X leftedge unaligned (width of window is still multiple of 4) ;v1.23 - Added mode to MBlit so that if a cookie is not present it will just blit the graphic in `replace'-mode (unmasked) ; - Minor pipeline improvement in macros !PerformPlot and !PerformPoint ; - Added code to the init routine to reserve default amounts of all objects at runtime (doesn't need much mem) ; - Added `BankToUse' parameter to MReserveShapes so that you don't have to do a seperate MUseShapeBank ; - Changed BoxF and Box routines to use X2,Y2 instead of Width,Height and had to add macro CCheckWindowFits4 ;v1.24 - Made the colour parameter in MPlot,MPlotShape,MPlotStencil and MPlotCookie optional, assuming 0 if not specified ; - *Partially* Added MLine, MLineShape, MLineStencil and MLineCookie ; - Modified shapebank-related routines to provide 32 shape banks numbered 0..31, instead of 0..9. ; - Fixed bugs in macros ShuffleRegs1, ShuffleRegs2 and ShuffleRegs3 ;v1.25 - Added MReMapUsingShape and MReMapShapeUsingShape ;v1.26 - Optimised routine PerformReMapUsing for slight speed gain ; - Optimised routine PerformReMap for 25% speed gain in table mode ; - Fixed bug in macro CCheckWindowFits4, which affected runtime errorchecking of MBox/MBoxF and related routines ;v1.27 - Added MInk for setting a currently-used pen colour. Defaults to 1 which is a bit more logical than 0 ; - Added MColourMode function to accompany CookieMode/SolidMode etc, but for `colour' drawing mode in blits ; - Added `colour' mode to MBlit, MQBlit, MSBlit, MQSBlit and MMaskScroll routines ; - Removed redundant instruction in routine PerformBlit3's loop, for cookie-mode stencil-blits (slight speedup) ; - Adjusted graphics routines to use the ink colour if assuming which colour to use, rather than 0 ; - Further optimised routine PerformReMapUsing for slight speedup (about 1-2fps) ; - Changed order of tables being used for MReMap[Shape]UsingShape, for consistency with `MReMapMode' blit mode ; - Added support for new Table objects ; - Added MReserveTables, MFreeTables, MFreeTable, MAddrTable, MTable ; - Added MFlushTable, MAutoUseTables, MUseTables, MUseTable, MUsedTable ; - Added MTablePtr, MReMapMode ; - Added new blit mode `ReMap' to the MBlit, MQBlit, MSBlit, MQSBlit and MMaskScroll routines for table-based remapping ;v1.28 - Optimised MPictureDissolveIn for speed gain (a good few fps) ; - Added MSimpleReMapMode ; - Added new blit mode `SimpleReMap' to the MBlit, MQBlit, MSBlit, MQSBlit and MMaskScroll routines for 1-dim remapping ; - Fixed bug in definitions, MPointStencil and MPointCookie were defined as statements, but should have been functions ; - Changed the !PerformPoint macro to initialise d0 before grabbing the byte, in case it causes corrupt return value ;v1.29 - Optimised non-cut routine used by MSMaskScrolls (PerformGenericBlit6[b]) ; - Slight optimisation to non-cut plain copy routine used by M[Q]SBlits (PerformBlit2) ; - Finished MLine, MLineShape, MLineStencil and MLineCookie ;v1.30 - Redirected routine PerformGenericBlit3[b] to use PerformBlit1[b], to save code redundancy, and made gen3b into 1b ; - Added MSMaskScrollMode to support blit modes for MSMaskScrolls (previously only MMaskScrolls) ; - Redirected routine PerformGenericBlit6[b] to use PerformBlit2[b], to prepare for shared sblit blit-mode code ; - Redirected routine PerformGenericBlit9[b] to use PerformBlit3[b], to prepare for shared sblit cut blit-mode code ; - Completed support for MSMaskScrolls in `copy' mode with blit modes, by adding PerformBlit2b (2 backwards) ; - Completed support for MSMaskScrolls in `cut' mode with blit modes, by adding PerformBlit3b (3 backwards) ; - Modified runtime errorchecking routines for MSMaskScrolls to check that tables are available in M[Simple]ReMapMode ;v1.31 - Modified MScroll routines to support any width (non multiple, as low as 1). ; - Modified MSScroll routines to support any width (non multiple, as low as 1) in both `paste' and `cut' modes. ;v1.32 - Fixed bugs in routine PerformBlit2[b] for non-cut output to stencil. Some OR's should have been AND's, and vice versa. ;v1.33 - Fixed bug in routine PerformLine, sometimes d5 was plotted rather than d6 ;v1.34 - Added MPlotParticles for plotting list of pixels to a colour. List items are X.w,Y.w ; - Added MGrabParticles for grabbing list of pixels to a buffer. List items are X.w,Y.w. Buffer is Pixel.b's ; - Added MDrawParticles for drawing grabbed list of pixels from a buffer. List items are X.w,Y.w. Buffer is Pixel.b's ; - Added MGrabParticlesAndPlot for grabbing and plotting pixels to a colour. List items are X.w,Y.w. Buffer is Pixel.b's ; - Fixed bug in initialisation, auto-clip for bitmaps and shapes shouldn't have been automatically On! ; - Added MPlotParticlesA, MGrabParticlesA, MDrawParticlesA, MGrabParticlesAndPlotA, for actual-address list items ; - Added MPlotParticlesQ, MGrabParticlesQ, MDrawParticlesQ, MGrabParticlesAndPlotQ, for X.q,Y.q items [*16*.16][*16*.16] ; - Added MAddToParticles, MAddToParticlesA, MAddToParticlesQ, for adding values to particle list items ; - Added MAdd2ToParticles, MAdd2ToParticlesA, MAdd2ToParticlesQ, for more efficient multiple adds to list items ;v1.35 - Added MWrapParticles, MWrapParticlesA, MWrapParticlesQ, to wrap coords around edges of bitmap/clip (within reason) ; - Fixed bugs in clip routine of MAddToParticlesQ and MAdd2ToParticlesQ, offsets and adders and adding were wrong ; - Fixed bugs in clip routine of MWrapParticles and MWrapParticlesQ, 2 conditional branches to loop missing ;v1.36 - Added MReboundParticles and MReboundParticlesQ, for bouncing particless off the edges. No `A' version, not possible ; - Fixed bugs in MLine, MLineShape, MLineStencil, MLineCookie, short version used wrong colour ; - Added MProcessor function, to replace blitz's `Processor' instruction and support 060 ; - Modified various cpu-related routines (c2p and 040 choices) to support possible 060 cpu number ; - Modified init routine to check for cpu availability and set MCPU, Mc2pCPUmode and M040c2pUsage to appropriate defaults ;v1.37 - Added MAddXYToParticles and MAddXYToParticlesQ for adding X and Y constants to X and Y components in a particle list ; - Added MAddXYToParticlesA to add constant value to list of Ptr.l particles ; - Added MAddXToParticles, MAddYToParticles, MAddXToParticlesQ and MAddYToParticlesQ for further adding to particle lists ;v1.38 - Removed unnecessary code from MPlotParticlesA, MGrabParticlesA, MDrawParticlesA and MGrabParticlesAndPlotA ; - Added MParticleMode to choose MColourMode, MReMapMode or MSimpleReMapMode for particle plot/draw ; - Added MSimpleReMapMode and MReMapMode support to MPlotParticles, MPlotParticlesA and MPlotParticlesQ (clipping also!) ; - Added MSimpleReMapMode and MReMapMode support to MDrawParticles, MDrawParticlesA and MDrawParticlesQ (clipping also!) ; - Added MSimpleReMapMode and MReMapMode support to MGrabParticlesAndPlot[A/Q] for remap plot and normal grab (and clip!) ; - Merged MAdd2ToParticles[A/Q] into extension of MAddToParticles[A/Q] to make friendlier interface & cut down on tokens ; - Token order has been compromised due to removal of MAdd2ToParticles, MAdd2ToParticlesA and MAdd2ToParticlesQ !!! ; - Fixed errornumber bugs in errorchecking routines of MShapePtr and MCookiePtr. Was Error28, should have been Error27 ; - Added support to MBitmapPtr, MStencilPtr, MShapePtr and MCookiePtr to assume currently used objects if no params ; - Merged MAddXToParticles[Q] into special-case routine of MAddXYToParticles[Q] (called if Y is 0) ; - Merged MAddYToParticles[Q] into special-case routine of MAddXYToParticles[Q] (called if X is 0) ; - Token order has been compromised due to removal of MAddXToParticles[Q] and MAddYToParticles[Q] !!! ;v1.39 - Optimised routine PerformLine for speedup and less instructions ; - Expanded MInk to allow specification of second and third inks to use ; - Slightly rearranged internal data area and ensured alignment without Even4's, ready for extensions to access ; - Added MMildredBase to return the base address of Mildred's internal data area ; - Added lib support for returning base of Mildred's internal data area to other libraries, at the end of Initialise ;v1.40 - Added CRsrc_TotWidth to resource structure, for shapes and bitmaps, and added support code in necessary routines ; - Modified many routines to read CRsrc_TotWidth rather than move.w mem->reg, add.w mem->reg. Slight general speedups ; - Rearranged part of Mc2pWindow to check and set auto-use at the start as it was possibly trashed by the CacheClearU_() ;v1.41 - Made MParticleMode, MBlitMode, MQBlitMode, MSBlitMode, MQSBlitMode, MMaskScrollMode and MSMaskScrollMode into commands ; - Slightly modified MUnQueue, negligible speedup, but better pipelining ; - Added MDrawingMode to change mode used for drawing operations such as MPlot, MLine, MBoxF etc ; - Added MDrawingMode support to MCls family for InvMode, MColourMode, MReMapMode and MSimpleReMapMode (no stencil remap!) ; - Added MDrawingMode support to MPlot family for InvMode, MColourMode, MReMapMode and MSimpleReMapMode (no stencil remap) ; - Added MDrawingMode support to MBoxF family for InvMode, MColourMode, MReMapMode and MSimpleReMapMode (no stencil remap) ; - Added MDrawingMode support to MBox family for InvMode, MColourMode, MReMapMode and MSimpleReMapMode (no stencil remap!) ; - Added MDrawingMode support to MLine family for InvMode, MColourMode, MReMapMode and MSimpleReMapMode (no stencil remap) ;v1.42 - Moved _DrawingModeType in data area and made it into a word, as it was mistakenly defined as a byte so was trashing ; - Fixed bugs in MSTile32x32 and MSTile32x32Store, wrapping was not implemented for the dest stencil ; - Slightly optimised routine PerformRemap and fixed bug in PerformRemapUsingShape as top half of d4 needed to be cleared ; - Slightly optimised MUnQueue (bitmap form), speedup of about 0.1fps! ; - Fixed major bug in routine PerformBlit1, ReMap mode routine was doing stencil cut but should have been a straight blit ; - Added optimisation as routines PerformBlit1[b]_16, to do groups of 16 pixels instead of 4 if the width is a multiple ; - Made M[c2pWindow][Shape][Bitmap]Width and M[c2pWindow][Shape][Bitmap]Height work without specified object number ; - Made MAddr[c2pWindow][Shape][Bitmap][Queue][Table] work without specified object number ; - Optimised macro RemakeStencil, used for generating a stencil or cookie from a bitmap or shape ; - Added optimisation as routines PerformBlit2[b]_16, to do groups of 16 pixels instead of 4 if the width is a multiple ; - Fixed major bug in routines PerformBlit2[b][_16] and PerformBlit3[b] in SolidMode write to mask was or instead of and ; - Recoded all tile blits in 030 mode from movem.l's to move.l's and done modulos different. 2-3fps faster, on 040. ; - Added optimisation as routines PerformBlit3[b]_16, to do groups of 16 pixels instead of 4 if the width is a multiple ; - Optimised GenericBlit (scroll) routines, optimised for when width is multiple of 16 or multilpes of 64 for blockscroll ; - Fixed bug in all tokens that add items to a queue. Upper word of d7 was corrupt due to unusual longword usage ;v1.43 - Added MParticleFormat to select mode for particle tokens, between 0=word, <0=quick and >0=actual memory addresses ; - Merged Word/Quick/Address versions of particle commands into single commands, using MParticleFormat to choose ; - Removed MReMap[Shape]UsingShape commands as they have been superceded by MDrawingMode functionality ; - Removed Mc2pToggleSingle, Mc2pToggleDouble and Mc2pToggleTriple, as you might as well just use Mc2pToggle. ; - Removed the MInitShape token and just kept with MShape for making new shapes ; - Renamed MUse[c2pWindows][Shapes][Bitmaps][Queues][Tables] to the singular versions and removed the plurals ; - Removed MMidHandle, MMidOrigin, MCopyHandle and MCopyOrigin completely ; - Removed the unused MFlushTable completely ; - Removed M040c2pUsage and any other tokens associated with its status. ; - Merged MMakeCookies into MMakeCookie and removed MMakeCookies token ; - Merged MMakeStencils into MMakeStencil and removed MMakeStencils token ; - Merged MFree[c2pWindows][Shapes][Bitmaps][Cookies][Stencils][Queues][Tables] to the singular and removed the plurals ; - Tokenisation has been severly compromised due to changes, deletions and additions.!! ;v1.44 - Moved MPictureDissolveIn token to the end of the library and renamed the old one to MNothing as the 128th token fails ;v1.45 - Killed Mc2pRowLacing, Mc2pColumnLacing, Mc2pRowToggle, Mc2pColumnToggle and Mc2pToggle. Tokens 1-5 free for use! ; - Removed all code relating to interlaced c2p conversion, especially from Mc2pWindow, Mc2p and data area ; - Changed c2pWindow structure to 8 bytes instead of 16 and allowed c2p0_Pixels to be .w or .l depending on modulos>0 ; - Modified Mc2pWindow and Mc2p to support non-modulo c2p routine, and implemented non-modulo c2p (040 and 030) into Mc2p ; - Added MPictureDissolveOut to wipe image to a colour, bit faster than cross-wiping to blank image in MPictureDissolveIn ; - Modified MCludge[Shape][Bitmap][Cookie][Stencil] to take the `-16' away from the programmer making base address actual ; - Merged MUnQueueRange into extra syntax option of MUnQueue, still able to unqueue range without flush or all with flush ; - Added MBlockUnQueue in place of MUnQueueRange for unqueing items with width and X coord multiple of 16 (doesn't check) ; - Modified clearscreen mode of MUnQueue and MBlockUnQueue to use current ink instead of just 0's ; - Tried to add stencil-unqueue (cut behind stencil) but failed, not enough regs, so removed ; - Slightly optimised clearscreen mode of M[Block]UnQueue to do forwards operation and (an)+ (removes need for mulu) ; - Slightly optimised routine PerformCls in all relevant blit modes ;v1.46 - Added MWrapXParticles and MWrapYParticles to do wrapping of only sides or top/bottom. No X-wrap for Ptr.l, however. ; - Added MAddToXParticles and MAddToYParticles to add list(s) to particles but only one of the two components (Not Ptr.l) ; - Fixed small bug in errorchecking routine of MAddToParticles, check for zero address occured when address was negative ; - Fixed bug in clipping version of .q 2-adder routine in MAddToParticles, a3 needed to have a skip value added ;v1.47 - Fixed bugs in routine PerformGenericBlit2[b], optimised routines were copying stencil also but should be data only ; - Added CustomOffsets.l to MScroll family, for using list of custom Width.w,X1Offset.w,X2Offset.w,SourceModulo.w values ; - Added CustomOffsets.l to MSScroll family, for using list of custom Width.w,X1Offset.w,X2Offset.w,SourceModulo.w values ; - Fixed bugs in generic blit routines, beq should have been blt for skipping if byte loopcounter was empty (-1 not 0) ; - Optimised remainder-byte checking in PerformGenericBlit2[b]/5[b], was no need to test for zero bytes ; - Small optimisation, changing bsr to bra if the jump is the last instruction of a routine, as there is no need to stack ; - Added LongwordStore.l to data area for temporary storage of longwords, like when stacking it would not be possible ; - Fixed bugs in errorchecking routines of MPointShape and MPointCookie, was jumping to Error28 instead of Error27 ; - Added [,Source.w] parameter to MPoint[Shape][Stencil][Cookie] to specify a source bitmap/shape for the operation ; - Added MZoom, MZoomShape, MZoomBitmapToShape and MZoomShapeToBitmap, for zoomed unmasked scrolls (+CustomOffsets list!) ; - Added macros CCheckXYFits2 and CCheckXYFits3 for use by errorchecking routines of MZoom[Shape][To][Bitmap] ;v1.48 - Fixed bug in routine PerformBlit1_16, indirect offsets in SimpleRemap were 0..3,0..3,0..3,0..3 should have been 0..15 ; - Optimised (1fps+) some scrolls that copy the stencil/cookie, as interleaving the moves is faster than as bursts ; - Optimised some blit modes in PerformBlit1/2/3[b][_16] using phase-shift, pipelining and interleaved mem accesses ; - Optimised the 030 tile routines a bit when doing an STile, by interleaving the moves ; - Optimised the SimpleReMap modes in PerformBlit1[b]_16/2[b]_16/3[b]_16 when width is multiple of 16 (gains up to 2fps) ; - Optimised zoom routines. Zooms with non-integer x factor are about 4fps faster ; - Optimised all zoom routines using addx method instead of swap/swap/add, gains of about 3-4fps ; - Added DeRes?.w as last compulsory param of zoom tokens, and added de-res routines to zooms ; - Optimised zoom routines for when x factor is 1.0 to do extra-fast y-zoom, many fps faster ; - Attempted to rewrite routine PerformLine using .q loop with addx, but it performed slower due to need to use divu.w ; - Optimised CustomZoom[DeRes] that uses CustomOffsets.l to do groups of 4 pixels if width is multiple, gain up to 2fps+ ;v1.49 - Added MAddMode which returns mode number 7 for use with various graphics routines to choose `Add' operations ; - Added full support throughout the lib for MAddMode routines, byte values of source and dest are simply added together ; - Updated the descriptions of numerous tokens to better represent recent changes ; - Fixed bug in single-colour section of routine PerformReMap, loopcounter was screwy ;v1.50 - Fixed bugs in MWrapXParticles and MWrapYParticles, loops were BGE and should have been BGT, causing 1 illegal loop ; - Fixed bugs in check routines of MBox[F] family, as tables were being checked for in MAddMode (where not necessary) ;v1.51 - Work resumed 27/02/2000 for the first time since 22/05/1999, copyright ownership has been reclaimed ; - Bug identified in PerformBlit1/2/3_16[b] MSimpleReMapMode. Masking isn't working right, shape's cookie is blocks of 4! ; - Macro RemakeStencil optimised by changing SNE.b to SEQ.b and removing the NOT.l, slight speedup making cookie/stencil ; - Fixed bug in PerformBlit1/2/3_16[b] MSimpleReMapMode. Replaced TST.l with CMP.l #-1, as it was skipping 4 instead of 1 ; - Design flaw: Programmers should beware that cludged cookies/stencils must share the same linemodulo as the main data ; - Optimised macro PerformYFlip for improved speed Yflipping if width is multiple of 16 ; - Optimised/recoded macro PerformXFlip for improved speed Xflipping if width is multiple of 4 or 16. ScrollDemo is 1fps+